import os
import sys
from datetime import datetime
from dotenv import load_dotenv
from werkzeug.security import generate_password_hash

# 确保能够导入应用模块
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 加载环境变量
load_dotenv()

# 导入应用和数据库模型
from app import app, db, Post, Comment, User

def init_db():
    """初始化数据库，创建表并添加示例数据"""
    with app.app_context():
        # 创建所有表
        db.create_all()
        
        # 检查是否已有用户数据
        if User.query.count() == 0:
            # 添加示例用户
            admin = User(email="admin@example.com", is_active=True)
            admin.set_password("admin123")
            
            user1 = User(email="user1@example.com", is_active=True)
            user1.set_password("user123")
            
            db.session.add(admin)
            db.session.add(user1)
            db.session.commit()
            
            print("已添加2个用户账户")
        else:
            print("用户表中已有数据，跳过用户初始化")
            admin = User.query.filter_by(email="admin@example.com").first()
            user1 = User.query.filter_by(email="user1@example.com").first()
        
        # 检查是否已有文章数据
        if Post.query.count() > 0:
            print("数据库已有文章数据，跳过初始化")
            return
        
        # 添加示例博客文章
        post1 = Post(
            title="欢迎使用个人博客系统",
            content="""# 欢迎使用个人博客系统！

这是一个基于Flask和SQLite构建的简单博客系统。您可以使用它来：

- 发布新的博客文章
- 编辑和删除现有文章
- 查看文章详情
- 添加评论与读者互动

## 技术栈

- **后端**：Flask + SQLite
- **前端**：TailwindCSS + Font Awesome
- **部署**：可以部署在任何支持Python的服务器上

## 开始使用

点击页面顶部的"写新文章"按钮，开始创建您的第一篇博客文章吧！

祝您使用愉快！
""",
            created_at=datetime.utcnow(),
            updated_at=datetime.utcnow(),
            user_id=admin.id
        )
        
        post2 = Post(
            title="Markdown语法指南",
            content="""# Markdown语法指南

在这个博客系统中，您可以使用Markdown语法来格式化您的文章。以下是一些基本的Markdown语法示例：

## 标题

使用`#`符号来创建标题，例如：

```
# 一级标题
## 二级标题
### 三级标题
```

## 文本格式

- **粗体**：`**粗体文本**`
- *斜体*：`*斜体文本*`
- ~~删除线~~：`~~删除线文本~~`

## 列表

无序列表：

```
- 项目1
- 项目2
- 项目3
```

有序列表：

```
1. 第一项
2. 第二项
3. 第三项
```

## 链接和图片

链接：`[链接文本](URL)`

图片：`![替代文本](图片URL)`

## 引用

> 这是一个引用示例。使用`>`符号来创建引用。

## 代码

行内代码：`code`

代码块：

```
def hello_world():
    print("Hello, World!")
```

## 水平线

使用三个或更多的`-`、`*`或`_`来创建水平线：

---

希望这个指南对您有所帮助！
""",
            created_at=datetime.utcnow(),
            updated_at=datetime.utcnow(),
            user_id=user1.id
        )
        
        # 添加到数据库
        db.session.add(post1)
        db.session.add(post2)
        db.session.commit()
        
        # 添加示例评论
        comment1 = Comment(
            content="这个博客系统看起来很棒！我喜欢简洁的设计。",
            author="张三",
            post=post1,
            created_at=datetime.utcnow()
        )
        
        comment2 = Comment(
            content="感谢分享这个Markdown指南，对我很有帮助！",
            author=user1.email,
            post=post2,
            created_at=datetime.utcnow(),
            user_id=user1.id
        )
        
        comment3 = Comment(
            content="我刚刚开始学习Flask，这个项目对我来说是个很好的参考。",
            author=admin.email,
            post=post1,
            created_at=datetime.utcnow(),
            user_id=admin.id
        )
        
        # 添加到数据库
        db.session.add(comment1)
        db.session.add(comment2)
        db.session.add(comment3)
        db.session.commit()
        
        print("数据库初始化完成！添加了2篇博客文章和3条评论。")

if __name__ == "__main__":
    init_db()